Автор оригинала: Victor de la Cruz.
Что ж, на этот раз я хочу поделиться с вами способом создания функционального бота Facebook, в этом случае я собираюсь использовать java в качестве бэкэнд-языка. Итак, прежде всего нам нужны следующие пункты для начала:
- Страница в Facebook
- Приложение Facebook
Проект Java Ну, я думаю, мне не нужно рассказывать вам, как создать страницу Facebook, поэтому давайте создадим приложение facebook и настроим его. Перейдите на страницу: Разработчики Facebook и добавьте новое приложение, мои приложения: > tekbot Теперь нам нужно создать токен для нашего серверного приложения, для этого мы должны добавить приложение messenger и перейти на вкладку “Настройки”, выбрать страницу и сгенерировать новый токен, токен выглядит так:
Теперь нам нужно создать токен для нашего серверного приложения, для этого мы должны добавить приложение messenger и перейти на вкладку “Настройки”, выбрать страницу и сгенерировать новый токен, токен выглядит так: Скопируйте этот маркер доступа в файл, теперь получите доступ к start.spring.io и настройте приложение со следующими зависимостями: Web, Lombok и загрузите его. Время кода….
@RestController() @RequestMapping("webhook") public class WebHook { private final String PAGE_TOKEN ="THIS_IS_THE_TOKEN_YOU_COPIED_BEFORE"; private final String VERIFY_TOKEN="A_SECRET_VERIFY_TOKEN"; //this is for reply messages private final String FB_MSG_URL="https://graph.facebook.com/v2.6/me/messages?access_token=" + PAGE_TOKEN; //logger to watch whats happening in our bot private final Logger logger = LoggerFactory.getLogger(WebHook.class); private final RestTemplate template = new RestTemplate(); //This is necessary for register a webhook in facebook @GetMapping() @ResponseStatus(HttpStatus.OK) public String get(@RequestParam(name = "hub.verify_token")String token, @RequestParam(name = "hub.challenge")String challenge){ if(token!=null && !token.isEmpty() && token.equals(VERIFY_TOKEN)){ return challenge; }else{ return "Wrong Token"; } } //This method reply all messages with: 'This is a test message' @PostMapping @ResponseStatus(HttpStatus.OK) public void post(@RequestBody FacebookHookRequest request){ logger.info("Message from chat: {}",request); request.getEntry().forEach(e->{ e.getMessaging().forEach(m->{ String id = m.getSender().get("id"); sendReply(id,"This is a test message"); }); }); } private void sendReply(String id,String text){ FacebookMessageResponse response = new FacebookMessageResponse(); response.setMessage_type("text"); response.getRecipient().put("id",id); response.getMessage().put("text",text); HttpEntityentity = new HttpEntity<>(response); String result = template.postForEntity(FB_MSG_URL,entity,String.class).getBody(); logger.info("Message result: {}",result); } }
Вам также необходимо добавить следующие классы: FacebookEntry.java,FacebookHookRequest.java,FacebookMessage.java,FacebookMessageResponse.java,FacebookMessaging.java это для того, чтобы сделать запрос на получение от Facebook:
@Data @NoArgsConstructor @AllArgsConstructor @ToString public class FacebookEntry implements Serializable { private String id; private Long time; private Listmessaging = new ArrayList<>(); } @Data @NoArgsConstructor @AllArgsConstructor @ToString public class FacebookHookRequest implements Serializable { private String object; private List entry = new ArrayList<>(); } @Data @NoArgsConstructor @AllArgsConstructor @ToString public class FacebookMessage implements Serializable { private String mid; private Long seq; private String text; } @Data @NoArgsConstructor @AllArgsConstructor @ToString public class FacebookMessageResponse implements Serializable { private String message_type; private Map recipient = new HashMap<>(); private Map message = new HashMap<>(); } @Data @NoArgsConstructor @AllArgsConstructor @ToString public class FacebookMessaging implements Serializable { private Map sender; private Map recipient; private Long timestamp; private FacebookMessage message; }
Теперь у вас есть весь сервер для ответов на сообщения манекенов, разверните это с помощью Героку команды для этого следующие:
$ heroku create $ git init $ git add . $ git commit -m 'Hook for facebook' $ git push heroku master
И когда приложение запущено, откройте конфигурацию приложения в facebook и настройте веб-крючок, указав URL-адрес вашего экземпляра heroku и путь: /веб-крючок Также вам необходимо выбрать следующие параметры: И нажмите кнопку Сохранить. Таким образом, с этой конфигурацией у вас есть все необходимое для тестирования вашего бота следующим образом: И если вы зайдете в журналы heroku, вы увидите следующий журнал:
Теперь вы можете добавить СПРАВКУ, например with.ai чтобы уловить намерения пользователя и добавить правила, используя DROOLS для контекстных разговоров
Оригинал: “https://www.codementor.io/@vcg_cruz/a-facebook-messenger-bot-m2g6wgcxb”