Vk api бот примеры

Пример простого бота для ВКонтакте на PHP. Обработка событий с использованием Callback API, голосовые сообщения с помощью Яндекс SpeechKit.

Сообщество бота: https://vk.com/botexample. Бот отправляет в ответ на любое сообщение картинку и голосовое сообщение с именем собеседника.

Подготовка к использованию

Укажите свои данные в config.php. Ключ доступа к API и код подтверждения для Callback API Вы можете получить в настройках сообщества. Подробнее о получении ключа доступа для Яндекс SpeechKit можно прочитать здесь.

Обработка событий Callback API. В нашем примере обрабатываются два события:

  • confirmation — уведомление для подтверждения адреса сервера;
  • new_message — уведомление о входящем сообщении.

Подробную информацию о типах событий и формате уведомлений Вы найдёте в документации ВК API.

Отправка сообщений с вложениями.

Функции для работы с методами API ВКонтакте

Функции для работы с API Яндекс SpeechKit для генерация голосовых сообщений.

БОТ ДЛЯ ГРУППЫ VK НА PYTHON ЗА 15 МИНУТ

bot-example-php’s People

Contributors

Stargazers

Watchers

Forkers

bot-example-php’s Issues

Invalid response for photos.saveMessagesPhoto request

19:12:55 [_vkApi_call] : [ERROR] ,,,]>> 19:12:55 [callback_handleEvent] : [ERROR] exception ‘Exception’ with message ‘Invalid response for docs.save request’ in /home/admin/web/public_html/weatherapp/www/api/vk_api.php:69 Stack trace: #0 /home/admin/web/public_html/weatherapp/www/api/vk_api.php(45): _vkApi_call(‘docs.save’, Array) #1 /home/admin/web/public_html/weatherapp/www/bot/bot.php(41): vkApi_docsSave(NULL, ‘Voice message’) #2 /home/admin/web/public_html/weatherapp/www/bot/bot.php(11): _bot_uploadVoiceMessage(189957065, ‘/home/admin/web. ‘) #3 /home/admin/web/public_html/weatherapp/www/index.php(56): bot_sendMessage(189957065) #4 /home/admin/web/public_html/weatherapp/www/index.php(32): _callback_handleMessageNew(Array) #5 /home/admin/web/public_html/weatherapp/www/index.php(18): callback_handleEvent() #6

При исправлении ошибки в CURLfile (недостаточно аргументов)
curl_setopt($curl, CURLOPT_POSTFIELDS, array(‘file’ => new CURLfile($file_name)));
=>
curl_setopt($curl, CURLOPT_POSTFIELDS, array(‘file’ => new CURLfile($file_name, mime_content_type($file_name), ‘file’)));
Ошибка в логах меняется на

19:15:42 [callback_handleEvent] : [ERROR] exception ‘Exception’ with message ‘Invalid response for photos.saveMessagesPhoto request’ in /home/admin/web/public_html/weatherapp/www/api/vk_api.php:69 Stack trace: #0 /home/admin/web/public_html/weatherapp/www/api/vk_api.php(31): _vkApi_call(‘photos.saveMess. ‘, Array) #1 /home/admin/web/public_html/weatherapp/www/bot/bot.php(29): vkApi_photosSaveMessagesPhoto(‘[]’, 849124, ‘8bc76748718508b. ‘) #2 /home/admin/web/public_html/weatherapp/www/bot/bot.php(8): _bot_uploadPhoto(189957065, ‘/home/admin/web. ‘) #3 /home/admin/web/public_html/weatherapp/www/index.php(56): bot_sendMessage(189957065) #4 /home/admin/web/public_html/weatherapp/www/index.php(32): _callback_handleMessageNew(Array) #5 /home/admin/web/public_html/weatherapp/www/index.php(18): callback_handleEvent() #6

Vk api verison below 5.81 is deprecated

Код сейчас в актуальном состоянии для работы с АПИ не поддерживается?

Полный гайд по созданию чат-ботов для ВКонтакте на Python. Пишем 4 вида бота за 25 минут

Бот не отвечает

Здравствуйте, бот не отвечает и у яндекса нет ключей speech Api. Они прекратили поддержку? В чем может быть проблема?

Как вызвать функцию при обращении к боту?

Как можно вызвать функцию при обращении в групповом чате?

Неотвечает

Почему то все прошло гладко а бот то неотвечает
Может изза того что нету secretkey как у вас в другом примере handler.php?

нашел логи и судя по ним проблема в токене:

15:10:02 [_vkApi_call] : [ERROR] ,,,]>> 15:10:02 [callback_handleEvent] : [ERROR] exception ‘Exception’ with message ‘Invalid response for photos.getMessagesUploadServer request’ in /api/vk_api.php:69 Stack trace: #0 /api/vk_api.php(23): _vkApi_call(‘photos.getMessa. ‘, Array) #1 /bot/bot.php(22): vkApi_photosGetMessagesUploadServer(396487030) #2 /bot/bot.php(8): _bot_uploadPhoto(396487030, ‘/var/www/bot. ‘) #3 /index.php(56): bot_sendMessage(396487030) #4 /index.php(32): _callback_handleMessageNew(Array) #5 /index.php(18): callback_handleEvent() #6

Пара вопросов по коду

  1. Что может выбросить исключение, которое мы пытаемся отловить в блоке try. catch (index.php)?
  2. Зачем нужен _callback_okResponse(); после блока try. catch (index.php)?
Еще по теме:  Видно ли в ВК кто заходил

Хотелось бы для себя прояснить эти вопросы для себя. Спасибо!

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

Бот для telegram на php. Отложенный постинг, кнопки, инлайн-запросы.

В общем-то, эта статья является дополнением этой — Пишем бота для Telegram на php, так-что если вы попали сюда впервые — советую, для начала, прочитать ее.

Здесь я отвечу читателям на ряд вопросов, которые мне были заданы тут на блоге, см комментарии в указанном выше посте. В общем и целом, все варианты тут будут приведены на php, однако ничто не мешает вам использовать так-же и C# тоже, да и любой другой язык.

Как, используя бота, публиковать новости в свой канал

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

Для решения этой, с виду не такой уж простой, задачи надо добавить нашего бота в канал, как администратора. Чтобы сделать это, я, на своей текущей версии телеграма, перехожу в админку канала и добавляю туда своего бота из вышеуказанной статьи. Переходим в управление группой -> administrators

Тыкаем туда, после чего указываем ник нашего бота и добавляем.

Код

А тут, на самом деле, ничего сложно нет. Фича именно что не очевидная, для многих. Сейчас поясню. По идее нам надо отправлять в канал сообщения через метод $bot->sendMessage(), однако, первый аргумент этого метода требует наличия некоего ID чата, в который отсылается сообщение. В случае с чатами, конфами и прочей фигней эти самые ID — цифровые, как у групп в VK, а вот в случае с каналами такие ID соответствуют названию самих каналов. Поэтому чтобы отослать в канал «Красные котлеты» сообщение «Тест» сгодится такой код:

Куда прописывать этот код? Да прямо между $bot = new TelegramBotApiClient($token,null); и $bot->run(); впишите. В смысле примерно так, как на картинке.

Как запустить? Да легко, переходим на страничку с вашим ботом и руками нажимаем там F5(обновить).

Ну и, собственно, вот результат работы данной команды —

Теперь ничего не стоит добавить вызов данной страницы в, например, CURL и получить отложенный постинг. Разберетесь. Так-же был вопрос — как сделать, чтобы бот публиковал в канал по команде, или публиковал в несколько каналов. — Запросто — используйте банальные GET параметры, вот как примерно в этом наброске кода:

Теперь достаточно обратиться к файлу index.php с get параметрами вида index.php?bname=revcombot. Дальше, думаю, сами разберетесь.

Как вывести кнопки после сообщения и обработать их

Для начала о каких кнопках идет речь. Вот на картинке вы видите их:

Как вывести такие кнопки используя telegram-bot/api? Вообще это весьма обширная тема, я чуть ли не два часа потратил на эти гребаные кнопки и попытки их осилить. Выводятся они следующим кодом:

// Кнопки у сообщений $bot->command(«ibutton», function ($message) use ($bot) < $keyboard = new TelegramBotApiTypesInlineInlineKeyboardMarkup( [ [ [‘callback_data’ =>’data_test’, ‘text’ => ‘Answer’], [‘callback_data’ => ‘data_test2’, ‘text’ => ‘ОтветЪ’] ] ] ); $bot->sendMessage($message->getChat()->getId(), «тест», false, null,null,$keyboard); >);

То есть по команде /ibutton вылезут к нам две кнопки Answer и ОтветЪ. С выводом разобрались, теперь нам надо их обработать. Это очень сложная часть всей свистопляски, которая отняла у меня изрядно времени. Делается все так:

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

// Обработка кнопок у сообщений $bot->on(function($update) use ($bot, $callback_loc, $find_command)< $callback = $update->getCallbackQuery(); $message = $callback->getMessage(); $chatId = $message->getChat()->getId(); $data = $callback->getData(); if($data == «data_test»)< $bot->answerCallbackQuery( $callback->getId(), «This is Ansver!»,true); > if($data == «data_test2»)< $bot->sendMessage($chatId, «Это ответ!»); $bot->answerCallbackQuery($callback->getId()); // можно отослать пустое, чтобы просто убрать «часики» на кнопке > >, function($update)< $callback = $update->getCallbackQuery(); if (is_null($callback) || !strlen($callback->getData())) return false; return true; >);

Вот и все. Собственно, вот результат работы этой функции:

Как вы видите — все отлично работает. Ну и вторая кнопка для большей… полноты материала.

Как вы видите так — тоже можно.

Обработка reply-кнопок

Если вы работали с botfater’ом то видели там такую панельку из кнопок, примерно:

То есть этот вид кнопок появляется не под сообщением, а под вашим текстовым полем. Как вывести эти кнопки? Вот код —

// Reply-Кнопки $bot->command(«buttons», function ($message) use ($bot) < $keyboard = new TelegramBotApiTypesReplyKeyboardMarkup([[[«text» =>»Власть советам!»], [«text» => «Сиськи!»]]], true, true); $bot->sendMessage($message->getChat()->getId(), «тест», false, null,null, $keyboard); >);

Тут задается команда /buttons после которой и появляются эти команды. Как обработать? На самом деле никакой особой обработки эти кнопки не требуют, в смысле их надо обрабатывать как обычные текстовые сообщения. В данном случае, я сделал это через метод on() —

// Отлов любых сообщений + обрабтка reply-кнопок $bot->on(function($Update) use ($bot)< $message = $Update->getMessage(); $mtext = $message->getText(); $cid = $message->getChat()->getId(); if(mb_stripos($mtext,»Сиськи») !== false)< $pic = «http://aftamat4ik.ru/wp-content/uploads/2017/05/14277366494961.jpg»; $bot->sendPhoto($message->getChat()->getId(), $pic); > if(mb_stripos($mtext,»власть советам») !== false)< $bot->sendMessage($message->getChat()->getId(), «Смерть богатым!»); > >, function($message) use ($name)< return true; // когда тут true — команда проходит >);

Ну и, собственно, если на любую из этих кнопок ткнуть, получим результат.

Обработка inline-запросов

Как сделать в своем боте такую-же фичу?

На самом деле эта задачка заставила меня попотеть изрядно. Я перелопатил половину буржунета и весь код долбаной библиотеки telebram-bot/api, отдебажил там все ключевые функции и только потом смог найти нормальный ответ. И знаете что? Вам, таки, повезло что я его нашел!

Подготовка бота

Не только лишь все боты могут обрабатывать inline запросы, а только те, в которых автор включил эту фичу. Идем на botfather’а и выполняем там команду /setinline, и выбираем бота. Вылезет что-то типа того:

Вот ТЕПЕРЬ можно начинать написание кода.

Код

Собственно в библиотеке бота есть метод $bot->inlineQuery(), именно он отвечает за обработку контекстных запросов. Но как заставить его работать? Оказывается у каждого поля, отправляемого в результат запроса свой формат + для некоторых полей надо данные готовить заранее. Однако я все прокомментировал, так что разобраться с этим функционалом вы сможете в два счета. А вот мне пришлось чуть ли не в слепую угадывать что и куда ставить из-за отсутствия вменяемой документации к библиотеке.

// обработка инлайнов $bot->inlineQuery(function ($inlineQuery) use ($bot) < mb_internal_encoding(«UTF-8″); $qid = $inlineQuery->getId(); $text = $inlineQuery->getQuery(); // Это — базовое содержимое сообщения, оно выводится, когда тыкаем на выбранный нами инлайн $str ; $base = new TelegramBotApiTypesInlineInputMessageContentText($str,»Html»); // Это список инлайнов // инлайн для стихотворения $msg = new TelegramBotApiTypesInlineQueryResultArticle(«1″,»С. Есенин»,»Отрывок из поэмы `Страна негодяев`»); $msg->setInputMessageContent($base); // указываем, что в ответ к этому сообщению надо показать стихотворение // инлайн для картинки $full = «http://aftamat4ik.ru/wp-content/uploads/2017/05/14277366494961.jpg»; // собственно урл на картинку $thumb = «http://aftamat4ik.ru/wp-content/uploads/2017/05/14277366494961-150×150.jpg»; // и миниятюра $photo = new TelegramBotApiTypesInlineQueryResultPhoto(«2»,$full,$thumb); // инлайн для музыки $url = «http://aftamat4ik.ru/wp-content/uploads/2017/05/mongol-shuudan_-_kozyr-nash-mandat.mp3»; $mp3 = new TelegramBotApiTypesInlineQueryResultAudio(«3″,$url,»Монгол Шуудан — Козырь наш Мандат!»); // инлайн для видео $vurl = «http://aftamat4ik.ru/wp-content/uploads/2017/05/bb.mp4»; $thumb = «http://aftamat4ik.ru/wp-content/uploads/2017/05/joker_5-150×150.jpg»; $video = new TelegramBotApiTypesInlineQueryResultVideo(«4»,$vurl,$thumb, «video/mp4″,»коммунальные службы»,»тут тоже может быть описание»); // отправка try< $result = $bot->answerInlineQuery( $qid, [$msg,$photo,$mp3,$video],100,false); >catch(Exception $e) < file_put_contents(«rdata»,print_r($e,true)); >>);

Еще по теме:  Как сделать онлайн радио в ВК

Как это работает в боте? Смотрим.

Проверить как это работает во всех трех случаях вы сможете прямо в telegram’е, ну а тут выведу вам результат теста только одного варианта с отрывком поэмы Сергея Есенина.

Надеюсь я смог решить вашу проблему.

Исходники

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

RevcomBot исходники

Скачано: 0, размер: 578.6 KB, дата: 24.Май.2017

Желающие могут поиграться с демонстрационным ботом тут — revcom_bot

Источник: pozi.pro

Как написать чат-бота для вк за 3 минуты

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

Статья написана для новичков, чтобы показать, что ничего сложного в написании ботов на Python нет.

Авторизация

Нам понадобится библиотека vk_api. Авторизоваться в вк можно двумя способами:
— Как пользователь
— Как сообщество

В первом случае надо будет ввести логин и пароль. Во втором случае в группе надо включить «Сообщения сообщества» и создать ключ доступа к API:

Авторизация в две строчки:

import time import vk_api vk = vk_api.VkApi(login = ‘login’, password = ‘password’) #vk_api.VkApi(token = ‘a02d. e83fd’) #Авторизоваться как сообщество vk.auth()

Отправка сообщений

Теперь напишем короткую функцию, которая отправляет сообщение выбранному человеку.

P.S. Сообщество может отправлять сообщения только ранее писавшим пользователям.

def write_msg(user_id, s): vk.method(‘messages.send’, )

В vk.method мы можем вызывать любой метод из VK API и передавать параметры в виде словаря.

В данном случае мы вызываем метод messages.send и в качестве параметров передаем id пользователя и текст сообщения.

Прием сообщений

Отлично! Отправлять сообщения мы научились, осталось научиться их принимать. Для этого нам нужен метод messages.get.

Несколько параметров, на которые стоит обратить внимание:

1) out — если этот параметр равен 1, сервер вернет исходящие сообщения.
2) count — количество сообщений, которое необходимо получить.
3) time_offset — максимальное время, прошедшее с момента отправки сообщения до текущего момента в секундах.
4) last_message_id — идентификатор сообщения, полученного перед тем, которое нужно вернуть последним (при условии, что после него было получено не более count сообщений)

values = vk.method(‘messages.get’, values)

В нашем случае этот метод вернет все полученные сообщения за последние 60 сек, если их конечно было меньше 100, а если больше, то последние 100.

В итоге мы получаем список items:

Если объяснять простыми словами, то items — это то, что можно выделить в диалоге.

Финальный аккорд, делаем вечный цикл, где на каждое сообщение будем отвечать «Привет, Хабр!».

while True: response = vk.method(‘messages.get’, values) if response[‘items’]: values[‘last_message_id’] = response[‘items’][0][‘id’] for item in response[‘items’]: write_msg(item[u’user_id’],u’Привет, Хабр!’) time.sleep(1)

P.S. Мы запоминаем параметр last_message_id, чтобы в следующий раз обрабатывать только новые сообщения.

Полный код

import time import vk_api vk = vk_api.VkApi(login = ‘login’, password = ‘password’) #vk_api.VkApi(token = ‘a02d. e83fd’) #Авторизоваться как сообщество vk.auth() values = def write_msg(user_id, s): vk.method(‘messages.send’, ) while True: response = vk.method(‘messages.get’, values) if response[‘items’]: values[‘last_message_id’] = response[‘items’][0][‘id’] for item in response[‘items’]: write_msg(item[u’user_id’],u’Привет, Хабр!’) time.sleep(1)

Получилось 17 строк кода. Успехов!

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

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