Рубрики
Без рубрики

БОТ-мессенджер Facebook

Базовый фиктивный бот

Автор оригинала: 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);
        HttpEntity entity = 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 List messaging = 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, вы увидите следующий журнал:

И если вы зайдете в журналы heroku, вы увидите следующий журнал:
И если вы зайдете в журналы heroku, вы увидите следующий журнал:
И если вы зайдете в журналы heroku, вы увидите следующий журнал:
И если вы зайдете в журналы heroku, вы увидите следующий журнал:

Теперь вы можете добавить СПРАВКУ, например with.ai чтобы уловить намерения пользователя и добавить правила, используя DROOLS для контекстных разговоров

Оригинал: “https://www.codementor.io/@vcg_cruz/a-facebook-messenger-bot-m2g6wgcxb”