Первоначально гость отправил Родольфо Ферро на солнце 10 декабря 2017 г. в Инструменты @ Пибиты
Родольфо недавно присоединился к нашему Кодовые проблемы и построил бот внимания стихийного бедствия (Disatbot), чат -бот, который помогает людям, затронутым стихийными бедствиями. В этой статье он показывает, как он построил этот бот с Telegram и (конечно) Питон. Покажите ему немного любви, потому что кто знает, это может быть спасением жизни (каламбур)! Мы рады, что он показал этот интересный проект, который он представил для Кодекс задача 43 который принесла ему книгу на чат -ботах./Род, пожалуйста, поделитесь …
«¿Quién Convocó A Tanto Muachacho, de Dónde Salió Tanto Voluntario, Cómo Fue Que La Sangre Sobró En Los Hospits, Quién Aratervó Las Brigadas Que Dirigieron El Tránsito de Chetculos y De Peatones Por Toda La Zona afectada? Нет конвакатории Hubo Ninguna, нет Se Hizo ningún llamado y todos acudieron “
“El Jueves Negro Que Cambió a México” – Эмилио Виале, 1985.
Немного контекста …
С 19 сентября 2017 г. Мексика пострадала от нескольких землетрясений ( The Guardian , CNN ) Это заставило меня задуматься, как мы могли бы лучше справиться с сообщениями о поврежденных зонах, людей, похороненных под обломками зданий, пострадавших, нуждающихся в медицинской помощи и других ситуациях.
Verificado 19S Было непосредственным решением для последующих отчетов из социальных сетей и визуализировать информацию на онлайн -карте. Это требовало большого мониторинга сообщений в социальных сетях в реальном времени (24/7) от людей, которые были расположены в пострадавших районах. И эти данные обновлялись каждые ~ 10 минут.
Поэтому я начал думать о способе оптимизации этого процесса для будущих ситуаций не только для землетрясений, но и для ситуаций в стиле бедствия в целом. Это стимулировало меня работать над этим ботом для пибитов Кодовая задача 43 – Создайте чат -бот с помощью Python Анкет
Так что сбалантрировать был рожден
Disatbot автоматизирует процесс отчетности об инцидентах через платформы обмена сообщениями, такие как Telegram, Facebook Messenger, Twitter и т. Д. В настоящее время это поддерживает только телеграмму, но я надеюсь расширить ее в другие социальные сети. Если вы хотите внести свой вклад, см. Раздел «Внести в конце».
Вы можете найти Disatbot по адресу:
- Телеграмма: https://t.me/disatbot
- Официальный репо: https://github.com/rodolfoferro/disatbot
Идея состояла в том, чтобы иметь простой поток, который позволил отчетность по стихийным бедствиям быть быстрым и простым. Общий процесс Disatbot заключается в следующем:
Идея состоит в том, что любой пользователь может взаимодействовать с ботом, выбрав параметры из меню кнопок в разговоре. Это значительно ускоряет инциденты отчетности.
Следующим шагом будет открытие билета, который будет храниться в базе данных для соответствующего государственного экземпляра/общественной организации/NGO/и т. Д. Чтобы подтвердить и отправить помощь. Когда больше нет помощи, или ситуация находится под контролем, билет закрыт.
Настраивать
Первый клон Репо Анкет Я использовал Python 3.6 и следующие пакеты:
Чтобы установить все зависимости создавать Виртуальная опция и беги:
pip install -r requirements.txt
Затем CD в папку Scripts и запустите BOT следующим образом:
python DisAtBot.py
Дизайн
В центре внимания первоначальной версии было создание кнопок меню для простого взаимодействия с пользователем. Второй – и основной – Выпущенная проблема была обработчиком разговоров. A Конечный штат Машина потребовался, чтобы сохранить желаемый поток и ответы для каждого состояния.
Я не буду слишком глубоко вдаваться в объяснение, но приведенный ниже код покажет, как я справился с этим.
Прежде всего, библиотека Telegram имеет несколько методов создания меню кнопок для ответов пользователей во время потока разговоров. Идея состоит в том, чтобы создать разметку клавиатуры для обработки ответов через кнопки. Это может быть либо встроено (кнопки появятся в окне разговора), либо в качестве клавиатуры ответа (кнопки будут отображаться под текстовым полетом для записи сообщений).
Пример можно увидеть в функции меню:
def menu(bot, update): """ Main menu function. This will display the options from the main menu. """ # Create buttons to select language: keyboard = [[send_report[LANG], view_map[LANG]], [view_faq[LANG], view_about[LANG]]] reply_markup = ReplyKeyboardMarkup(keyboard, one_time_keyboard=True, resize_keyboard=True) user = update.message.from_user logger.info("Menu command requested by {}.".format(user.first_name)) update.message.reply_text(main_menu[LANG], reply_markup=reply_markup) return SET_STAT
Как видите, клавиатура
Переменная – это список, который содержит четыре кнопки, которые будут отображаться. Макет можно установить путем гнездования списков внутри. В этом случае Отчет и Карта Кнопки в первом ряду, а FAQ и О Кнопки во втором ряду. Это похоже на:
Продолжение с кодом, Ответить Markup
необходимо для обработки ответов кнопок. Он определяет макет меню: если отображается только одно меню, если его необходимо изменить и т. Д.
Регистратор используется для бота, а update.message.reply (...)
Функция используется для обновления отображаемого текста в соответствии с ответом от пользователя. Set_stat
Переменная, возвращаемая в этой функции, является (предопределенным) целым числом, чтобы вернуть состояние в то время и следовать потоку.
Теперь мы понимаем создание и обработку меню. Причина использования кнопок заключается в том, что мы хотим быстрого взаимодействия, потому что бот используется в чрезвычайной ситуации.
Обработчик разговора – Телеграмма Разговор -индлер
– Позаботится о установлении состояния или шага потока, в котором мы сейчас находимся, конечный штат, который я упоминал ранее. Обратите внимание, что каждое состояние также необходимо обрабатывать соответствующую информацию (ответы кнопок и т. Д.)
Этот код показывает обработчик разговора:
def main(): """ Main function. This function handles the conversation flow by setting states on each step of the flow. Each state has its own handler for the interaction with the user. """ global LANG # Create the EventHandler and pass it your bot's token. updater = Updater(telegram_token) # Get the dispatcher to register handlers: dp = updater.dispatcher # Add conversation handler with predefined states: conv_handler = ConversationHandler( entry_points=[CommandHandler('start', start)], states={ SET_LANG: [RegexHandler('^(ES|EN)$', set_lang)], MENU: [CommandHandler('menu', menu)], SET_STAT: [RegexHandler( '^({}|{}|{}|{})$'.format( send_report['ES'], view_map['ES'], view_faq['ES'], view_about['ES']), set_state), RegexHandler( '^({}|{}|{}|{})$'.format( send_report['EN'], view_map['EN'], view_faq['EN'], view_about['EN']), set_state)], LOCATION: [MessageHandler(Filters.location, location), CommandHandler('menu', menu)] }, fallbacks=[CommandHandler('cancel', cancel), CommandHandler('help', help)] ) dp.add_handler(conv_handler) # Log all errors: dp.add_error_handler(error) # Start DisAtBot: updater.start_polling() # Run the bot until the user presses Ctrl-C or the process # receives SIGINT, SIGTERM or SIGABRT: updater.idle()
Сначала это может показаться немного запутанным, но это сводится к:
- У обработчика разговора есть состояния потока.
- У него также есть точки входа (например, функция
start
и запасные стороны (такие какcancel
иПомощь
функции). - Он также содержит несколько обработчиков ошибок.
- Глобальный
Lang
Используется переменная, поскольку реализация - Я забыл упомянуть – поддержать взаимодействие на английском или испанском! Чтобы поддержать это, я создал словаря для каждого взаимодействия на обоих языках.
Если вы хотите проверить полный код этого бота, ознакомьтесь с каталогом Scripts, где вы найдете основной сценарий и языковые словаря.
Некоторые другие реализованные функции – это обработка геолокации и О
/ FAQ
разделы. Но лучший способ узнать об этом проекте – посмотреть его в действии (для живой демонстрации, перейти к 8:30):
Будущая работа
Для будущего развития я думаю о добавлении карты. Система уже создает файл Geojson из приобретенных мест.
Как уже упоминалось, я рассматриваю возможность расширить это на другие платформы, такие как Facebook Messenger и Twitter. Еще одна хорошая вещь, которую нужно добавить, – это веб -сайт, объясняющий основные варианты использования бота, возможно, вики – вроде – сайт?
Если у вас есть какие -либо другие идеи или предложения, не стесняйтесь Свяжитесь со мной или:
Делать вклад
Если вы заинтересованы в участии в этом проекте, не стесняйтесь взглянуть на репо Вклад файл. Мне было бы очень приятно, если этот проект вырастет до чего -то, что использовалось в реальной жизни, чтобы облегчить драматические последствия стихийного бедствия, что, кажется, всегда поражается, когда меньше всего ожидается.
Сохраняйте спокойствие и код в Python! – Стержень
Оригинал: “https://dev.to/rodolfoferro/disatbot—how-i-built-a-chatbot-with-telegram-and-python-ajn”