Skip to content

Commit

Permalink
add zendesk tool
Browse files Browse the repository at this point in the history
  • Loading branch information
jacobweiss2305 committed Apr 16, 2024
1 parent f4fe1ca commit f30c66f
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 0 deletions.
18 changes: 18 additions & 0 deletions cookbook/tools/zendesk_tools.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from phi.assistant import Assistant
from phi.tools.zendesk import ZendeskTools
import os

# Retrieve Zendesk credentials from environment variables
zd_username = os.getenv("ZENDESK_USERNAME")
zd_password = os.getenv("ZENDESK_PW")
zd_company_name = os.getenv("ZENDESK_COMPANY_NAME")

if not zd_username or not zd_password or not zd_company_name:
raise EnvironmentError("Please set the following environment variables: ZENDESK_USERNAME, ZENDESK_PW, ZENDESK_COMPANY_NAME")

# Initialize the ZendeskTools with the credentials
zendesk_tools = ZendeskTools(username=zd_username, password=zd_password, company_name=zd_company_name)

# Create an instance of Assistant and pass the initialized tool
assistant = Assistant(tools=[zendesk_tools], show_tool_calls=True)
assistant.print_response("How do I login?", markdown=True)
50 changes: 50 additions & 0 deletions phi/tools/zendesk.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
from phi.tools import Toolkit
import json
import re
import requests

class ZendeskTools(Toolkit):
"""
A toolkit class for interacting with the Zendesk API to search articles.
It requires authentication details and the company name to configure the API access.
"""

def __init__(self, username: str, password: str, company_name: str):
"""
Initializes the ZendeskTools class with necessary authentication details
and registers the search_zendesk method.
Parameters:
username (str): The username for Zendesk API authentication.
password (str): The password for Zendesk API authentication.
company_name (str): The company name to form the base URL for API requests.
"""
super().__init__(name="zendesk_tools")
self.username = username
self.password = password
self.company_name = company_name
self.register(self.search_zendesk)

def search_zendesk(self, search_string: str) -> str:
"""
Searches for articles in Zendesk Help Center that match the given search string.
Parameters:
search_string (str): The search query to look for in Zendesk articles.
Returns:
str: A JSON-formatted string containing the list of articles without HTML tags.
Raises:
ConnectionError: If the API request fails due to connection-related issues.
"""
auth = (self.username, self.password)
url = f"https://{self.company_name}.zendesk.com/api/v2/help_center/articles/search.json?query={search_string}"
try:
response = requests.get(url, auth=auth)
response.raise_for_status()
clean = re.compile('<.*?>')
articles = [re.sub(clean, '', article["body"]) for article in response.json()['results']]
return json.dumps(articles)
except requests.RequestException as e:
raise ConnectionError(f"API request failed: {e}")

0 comments on commit f30c66f

Please sign in to comment.