https://szkolazpieklarodem.pl/
Ten skrypt jest podobny do tego, czego nauczyliśmy się i napisaliśmy do tej pory, ale wymaga zastąpienia niektórych istniejących metod rasa_core, abyśmy mogli zdefiniować własną regułę uwierzytelniania API. W poniższym kodzie wykonałem podstawowe sprawdzenie ciągu w celu weryfikacji tokena. Nie jest to zalecane w przypadku systemów na poziomie produkcyjnym, więc pamiętaj, aby napisać tę część ostrożnie, jeśli budujesz chatbota dla większych systemów. Utwórz nowy plik o nazwie myown_chatbot.py i dodaj do niego następującą zawartość:
import os
from rasa_core.channels.rasa_chat import RasaChatInput
from rasa_core.agent import Agent
from rasa_core.interpreter import RasaNLUInterpreter
from rasa_core.utils import EndpointConfig
# load your trained agent
interpreter = RasaNLUInterpreter(“models/nlu/default/horoscopebot/”)
MODEL_PATH = “models/dialogue”
action_endpoint = EndpointConfig(url=”https://horoscopebot1212-actions.
herokuapp.com/webhook”)
agent = Agent.load(MODEL_PATH, interpreter=interpreter, action_endpoint=
action_endpoint)
class MyNewInput(RasaChatInput):
def _check_token(self, token):
if token == ‘mysecret’:
return {‘username’: 1234}
else:
print(“Failed to check token: {}.”.format(token))
return None
input_channel = MyNewInput(url=’https://horoscopebot1212.herokuapp.com’)
# set serve_forever=False if you want to keep the server running
s = agent.handle_channels([input_channel], int(os.environ.get(‘PORT’,
5004)), serve_forever=True)
Należy tutaj zwrócić uwagę na kilka punktów:
- Metoda _check_token w rasa_core zasadniczo wygląda jak poniżej i powoduje wywołanie API w celu pobrania obiektu użytkownika. Wykonuje to przede wszystkim zadanie uwierzytelniania/uwierzytelniania na poziomie użytkownika. We wcześniejszej zastąpionej metodzie uproszczono jej działanie i zrozumieliśmy jej użycie.
def _check_token(self, token):
url = “{}/users/me”.format(self.base_url)
headers = {“Authorization”: token}
logger.debug(“Requesting user information from auth server {}.”
“”.format(url))
result = requests.get(url,
headers=headers,
timeout=DEFAULT_REQUEST_TIMEOUT)
if result.status_code == 200:
return result.json()
else:
logger.info(“Failed to check token: {}. “
“Content: {}”.format(token, request.data))
return None
- Użycie własnej metody _check_token Rasy może wymagać napisania jednego interfejsu API lub usługi internetowej, która zaakceptuje żądanie i zwróci odpowiedź w określony sposób.
- Pamiętaj o zmianie punktu końcowego serwera akcji na własny adres URL.
• Pamiętaj, że ciąg mysecret w kodzie zostanie później użyty do wywołań API.