-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
f4fe1ca
commit f30c66f
Showing
2 changed files
with
68 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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}") |