Custom payload dialogflow Telegram примеры

Речь пойдет именно о кнопочном (командном) боте, а не разговорном. Сейчас многие ассоциируют сервис DialogFlow, как платформу для написания простых диалоговых чат-ботов с ограниченным функционалом. Соответственно и вся информация по этой теме освещает вопросы построения «умных» диалогов.

Но при этом DialogFlow довольно мощный ресурс, на котором можно реализовать достойного чат-бота, который не только может поддержать разговор, но и способен реагировать на команды пользователей. Зачастую, кнопочные боты более востребованные для решения основных задач и являются оптимальными в качестве помощников для большинства компаний в бизнес среде. К тому же бота можно создать без использования платных сервисов и глубоких познаний соответствующих языков программирования.

Как начать пользоваться сервисом DialogFlow и запустить первого бота с интеграцией в один клик рассказывать не буду. Подобной информации достаточно в открытых источниках, в том числе и на Хабре. Сразу перейду к процессу реализации кнопочного меню.

Dialogflow basic Introduction: Custom payload

Реализовать кнопки меню можно двумя способами:

1. При помощи стандартного «ADD RESPONSES».

Возьмем любой уже созданный интент либо создадим новый. В исходящем контексте прописываем новый параметр, например, «menu».

image

Цифра 5 означает время жизни данного контекста. В данном случае контекст будет работать до 5-ти реакций пользователя. Это значение можно изменить на какое угодно по желанию в зависимости от задачи.

В нашем интенте находим кнопку «Add response» и выбираем «Quick Replies».

image

В строке «Title» указываем любой текст, который будет отправляться в чат перед выводом меню с кнопками. Это может быть, например, призыв к действию или указание на выбор пункта меню.

В строке ниже указывается непосредственно название кнопки (не более 20-и символов). Последующие кнопки просто добавляем в строках ниже. Таким образом можно добавить любое количество кнопок, которые будут располагаться в том же порядке в чате.

Для каждой кнопки создаем одноименный отдельный интент. Во входящем контексте таких интентов должен быть параметр «menu», который мы указывали в нашем основном интенте.

image

Контекст позволяет нам связать наши команды меню с действиями бота на эти команды.

Особенностью такого варианта добавления меню является отправка пользователем текста с названием кнопки в чат при ее нажатии. Т.е. когда пользователь нажмет кнопку «Консультация» он фактически отправит в чат текст «Консультация». Для отработки ботом этой команды необходимо добавить текстовый ответ, ссылку или картинку в интент «Консультация».

В Viber, например, это выглядит так:

Еще по теме:  Боты Телеграм для просмотра фото

image

Custom payload in Dialogflow

Недостатком такого меню является отсутствие редиректа пользователя сразу при нажатии кнопки. Ссылку для перехода можно только отправить в чат. Также недоступны такие возможности при нажатии кнопки, как: отправка номера телефона пользователя в чат, открытия витрины с товарами и т.д. Но все это можно реализовать при помощи «Custom Payload». Оч ем и пойдет речь ниже.

2. При помощи «Custom Payload».

adding custom JSON payloads for TELEGRAM in Dialogflow to get users to share their phone number

the function below is supposed to provides the fulfillment to the share_your_phone_number intent. When the intent is invoked, the share your phone number keyboard is displayed for the user in telegram.

function share_your_phone_number(agent) < agent.add(`Welcome.`); agent.add(new Payload(«telegram», < «text»: «Please click on button below to share your number», «reply_markup»: < «one_time_keyboard»: true, «resize_keyboard»: true, «keyboard»: [ [ < «text»: «Share my phone number», «callback_data»: «phone», «request_contact»: true >], [ < «text»: «Cancel», «callback_data»: «Cancel» >] ] > > )); >

When I deploy the API in the inline editor, only the «Welcome» string is returned in telegram bot chat. the key board buttons are not displayed. I need a clue to fix fix this.

asked Mar 1, 2019 at 22:44
61 1 1 silver badge 6 6 bronze badges

2 Answers 2

In creatin the Constructor for Payload object as documented [here]https://dialogflow.com/docs/reference/fulfillment-library/rich-responses#new_payloadplatform_payload, the platform and payload parameters are required.

new Payload(platform, payload)

The platform parameter is a property of WebhookClient object and should be defined as such (agent.SLACK, agent.TELEGRAM etc) assuming the webhookClient was instantiated and stored in agent

Examples:

agent.add(new Payload(agent.ACTIONS_ON_GOOGLE, ); agent.add(new Payload(agent.SLACK, );

For my use-case outlined in the question this is my full solution:

// See https://github.com/dialogflow/dialogflow-fulfillment-nodejs // for Dialogflow fulfillment library docs, samples, and to report issues ‘use strict’; const functions = require(‘firebase-functions’); const = require(‘dialogflow-fulfillment’); const = require(‘dialogflow-fulfillment’); process.env.DEBUG = ‘dialogflow:debug’; // enables lib debugging statements exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => < const agent = new WebhookClient(< request, response >); console.log(‘Dialogflow Request headers: ‘ + JSON.stringify(request.headers)); console.log(‘Dialogflow Request body: ‘ + JSON.stringify(request.body)); function welcome(agent) < agent.add(new Payload(agent.TELEGRAM, < «text»: «Please click on button below to share your number», «reply_markup»: < «one_time_keyboard»: true, «resize_keyboard»: true, «keyboard»: [ [ < «text»: «Share my phone number», «callback_data»: «phone», «request_contact»: true >], [ < «text»: «Cancel», «callback_data»: «Cancel» >] ] > >)); > // Run the proper function handler based on the matched Dialogflow intent name let intentMap = new Map(); intentMap.set(‘Default Welcome Intent’, welcome); agent.handleRequest(intentMap); >);

Источник: stackoverflow.com

Подключаем нейросеть Google Dialogflow к вашему боту

Обложка: Подключаем нейросеть Google Dialogflow к вашему боту

Привет! Меня зовут Илья Осипов, я методист курса программирования на Python «Девман» и больше пяти лет пишу код на этом языке. Сегодня расскажу, как новичку сделать полезного чат-бота.

ChatGPT, купленная Microsoft, постепенно захватывает мир. Но у Google уже лет пять как есть своя нейросеть, которой можно пользоваться бесплатно и так же бесплатно интегрировать в свои продукты. Она поглупее, попроще, но с задачей «понять смысл вопроса и ответить заготовленной фразой» вполне справляется.

Еще по теме:  Как перенести все чаты на другой аккаунт в Телеграмме

Кто-то скажет, что это минус в сравнении с ChatGPT. Но, на мой взгляд, они не конкуренты, а решают разные задачи. ChatGPT в ситуации неуверенности, «придумывает» ответ, даже если он будет неправильным. Она хорошо умеет реагировать на широкий спектр вопросов, выполнять творческие задачи. Но, например, в центре техподдержки это и не нужно.

98% пользователей обращаются с типовыми вопросами: «Как сделать X?», «Где найти Y?». В такой ситуации не нужно творчество, да и генерировать уникальный ответ каждый раз тоже ни к чему. Наоборот, будет странно, если в ответ на вопрос «Как мне вернуть деньги за эту услугу?» клиент получит рассуждения «А нужны ли вам эти деньги?» или ещё какой-нибудь казус, который может выдать ChatGPT.

Редактор-модератор сообщества по теме Python / Data Science / AI Tproger , Удалённо , От 50 000 ₽

DialogFlow куда лучше справляется с такого типа задачами. Она всё ещё выполнит полезную работу: прочитает текст и поймёт «смысл» вопроса клиента. Но реагировать будет заранее выверенными ответами, без сюрпризов.

Ниже я расскажу, как зарегистрироваться в DialogFlow и собрать на ней небольшой центр техподдержки. Сначала будет пример, как сделать это вообще без кодинга, а далее поговорим о том, как внедрить технологию в свой код.

Дисклеймер: Да, многих бесят такие боты. Но вы не представляете, сколько денег они экономят на типовых вопросах. Бывает, боты не понимают сложный вопрос и отвечают невпопад. На такой случай обычно всегда можно позвать человека. Но на каждый такой «сложный» вопрос приходится сотня типовых, с которыми бот легко справляется самостоятельно.

Шаг 1: Создайте проект в DialogFlow

Начните с создания профиля на DialogFlow. Зайдите на сайт DialogFlow и создайте проект:

И после этого заполните небольшую форму:

Шаг 2: Поздоровайтесь со своим творением

Сразу, как только создали бота, он уже кое-что умеет: здороваться и говорить, что вас не понял.

С ним уже можно пообщаться, жмите в поле справа-сверху и попробуйте с ним поздороваться. Он понимает множество способов это сделать:

Вот я попробовал с ним поздороваться, и он меня понял:

Как он это понял? За это отвечают намерения (Intents). Каждое намерение — это одна тема разговора, которую понимает бот. Как только вы создали бота, у вас появились два намерения:

На них можно кликнуть и посмотреть, что внутри. Например, я кликнул на «Welcome Intent» и вижу набор приветствий, на которых тренировалась нейросеть:

Шаг 3: Научите бота новым словам

Поздороваться в ответ — это, конечно, важная функция, но за такое вам не заплатят. Давайте научим бота обрабатывать какой-нибудь запрос пользователя, например «Забыл пароль».

Еще по теме:  Маленькая скорость загрузки видео в Телеграм

Создайте новое намерение по кнопке Create Intent и нажмите внутри Add training phrases:

Теперь нужно объяснить боту, что за намерение он должен обрабатывать. Нужны примеры. Заполните несколько примеров, как пользователь может обратиться в техподдержку. Вот список фраз, который придумал я:

Далее пролистайте вниз и найдите Add Response:

Добавьте текст, которым бот должен отвечать в ответ на тренировочные фразы:

В конце концов, когда вы создали новое намерение, можно написать боту новый вопрос и посмотреть, что он ответит:

Обратите внимание, я написал боту фразу, которой не было среди тренировочных. Даже похожих толком не было. Он понял смысл фразы и научился.

Шаг 4: Подключаем к Telegram

Дальше будет два набора инструкций: для программистов и для людей, которые кодить не умеют.

Если вы зерокодер

То теперь просто возвращаетесь на сайт DialogFlow, жмёте Integrations, находите Telegram и вставляете туда токен. Готово, можно общаться с новым другом:

Если вы программист

То поздравляю, ваш бот сможет куда больше! Скачайте консольную утилиту gcloud, залогиньтесь в ней через консоль и передайте в неё project_id вашего проекта в DialogFlow. Его можно посмотреть здесь:

После включите API для вашего проекта, скачайте гугловскую библиотеку для вашего языка программирования и можете начинать пользоваться API!

Я программирую на Python, поэтому скачал google-cloud-dialogflow. Теперь пора написать немного кода: нужна авторизация в Google и получение ответа от DialogFlow. По ссылкам вы найдёте готовые примеры кода от Google.

Примеры в документации довольно монструозные, т.к. писались сразу под все языки подряд. Я почистил пример для Python, можете посмотреть его по ссылке на мой gist. Заодно примеры уже собраны в один кусочек кода, вместе. Не забудьте подставить в код свой PROJECT_ID на 36-ой строке, иначе ничего не получится.

В общем-то готово. Код умеет получать ключи от Google, передавать ввод пользователя в DialogFlow и получать ответ. Теперь можете интегрировать этот код буквально куда угодно. Если хотите сделать шаг дальше — можно засунуть этот код в чат-бота.

Теперь, из предыдущей моей статьи можно взять заготовку для бота.. Достаточно закинуть все импорты и функции из обоих заготовок кода в один файл. После, чтобы всё завелось, достаточно чуть переписать код, заменить функцию echo на такой кусочек кода и готово:

def echo_dialogflow(update, context): message_to_dialogflow = update.message.text session_id = update.effective_chat.id serialized_answer = detect_intent_text(project_id, session_id, message_to_dialogflow) update.message.reply_text(serialized_answer[‘answer’]) if __name__ == ‘__main__’: project_id = ‘ВАШ_PROJECT_ID’ token = create_api_key(project_id) print(«Successfully created an API key») updater = Updater(«ВАШ_TELGRAM_TOKEN») dispatcher = updater.dispatcher dispatcher.add_handler(CommandHandler(«start», start)) dispatcher.add_handler(MessageHandler(Filters.text undefined ~Filters.command, echo_dialogflow)) updater.start_polling() updater.idle()

А вот что получится в итоге:

Теперь вы можете дообучить бота отвечать на нужные вам вопросы через браузерный интерфейс или по API.

Источник: tproger.ru

Рейтинг
( Пока оценок нет )
Загрузка ...