使用者工具

網站工具


tech:linebot

測試建構 LINE BOT (Developer Trial 方案)

  • 環境 : CentOS Linux release 7.6.1810 (Core)
  • 語言 : PHP 7.2
  • Web : Nginx 1.12.2
  • DB : MariaDB 5.5.60

申請Developer Trial帳號

  1. 使用自己的 LINE 帳號登入
  2. Create new provider
  3. Create new channel → Messaging API → Plan : Developer Trial

建立開發環境

  • 安裝 php 與 httpd 相關套件
    yum install epel-release
    rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
    yum install composer mariadb mariadb-server nginx unzip php72w php72w-cli php72w-common php72w-curl php72w-fpm php72w-gd php72w-mbstring php72w-mysqlnd php72w-process php72w-snmp php72w-xml php72w-zip php72w-opcache
  • 設定 Web server - nginx
    vi /etc/php-fpm.d/www.conf
    :
    ;user = apache
    user = nginx
    ; RPM: Keep a group allowed to write in log dir.
    group = apache
    
    ; The address on which to accept FastCGI requests.
    ; Valid syntaxes are:
    ;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
    ;                            a specific port;
    ;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
    ;                            a specific port;
    ;   'port'                 - to listen on a TCP socket to all addresses
    ;                            (IPv6 and IPv4-mapped) on a specific port;
    ;   '/path/to/unix/socket' - to listen on a unix socket.
    ; Note: This value is mandatory.
    ;listen = 127.0.0.1:9000
    listen = /var/run/php-fpm/php7.2-fpm.sock
    
    ; Set listen(2) backlog.
    ; Default Value: 511 (-1 on FreeBSD and OpenBSD)
    ;listen.backlog = 511
    
    ; Set permissions for unix socket, if one is used. In Linux, read/write
    ; permissions must be set in order to allow connections from a web server. Many
    ; BSD-derived systems allow connections regardless of permissions.
    ; Default Values: user and group are set as the running user
    ;                 mode is set to 0660
    ;listen.owner = nobody
    ;listen.group = nobody
    ;listen.mode = 0660
    listen.owner = nginx
    listen.group = nginx
    listen.mode = 0660
    
    ; When POSIX Access Control Lists are supported you can set them using
    ; these options, value is a comma separated list of user/group names.
    :
    systemctl enable php-fpm
    systemctl restart php-fpm
     
    vi /etc/nginx/nginx.conf
    :
        server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  _;
            root         /usr/share/nginx/html;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
     charset utf-8;
     gzip on;
     gzip_types text/css application/javascript text/javascript application/x-javascript image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
     location / {
      try_files $uri $uri/ /index.php?$query_string;
     }
     location /api/v0 {
      try_files $uri $uri/ /api_v0.php?$query_string;
     }
     location ~ \.php {
      include fastcgi.conf;
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      fastcgi_pass unix:/var/run/php-fpm/php7.2-fpm.sock;
     }
     location ~ /\.ht {
      deny all;
     }
    
    
            error_page 404 /404.html;
                location = /40x.html {
    :
    systemctl enable nginx
    systemctl restart nginx

驗證 Webhook 是否可以正確連上

  • 假設 Channel 為 iChiaYi-Bot
  • Use webhooks → Enable
  • 假設 Webhook URLhttps://www.ichiayi.com/linebot/Webhook.php → 按下 Verify 後要能夠看到 Success
  • 如果想要讓 Bot 可以被邀請加入某群組中 Allow bot to join group chats → Enable

安裝 line-bot-sdk-php

  • 透過 composer 安裝
    cd /usr/share/nginx/
    composer require linecorp/line-bot-sdk
    cd vendor/linecorp/line-bot-sdk/
    composer install

寫一個 LINE BOT 程式

  • https://developers.line.biz/console/ 選上面建立的 Provider → channel Exp. iChiayi-Bot (Messaging API)
    • Channel settings :
      • QR Code : 可以讓手機 LINE 直接掃描加 BOT 當好友,也可以將 BOT 邀請到 LINE 群組內
      • Channel secret : 提供後續開發時重要的 KEY, 大概長的像這樣
        629345c1d259db2e59c308e05b371f5x
      • Channel access token(long-lived) : 提供後續開發時重要的 KEY, 大概長的像這樣
        U2nmqwuvXIA0h0JyDzeeSP/51YwnkbcCCw89BzCOCav9+cc+kTTWugtWdbw729e3VBfXt6B4NrCu9F3+yHWWC4Wx235D123+4J42IWSDrzj4PTiB68DkHN7W4dq4XQJi9kdpNpbw90EsdfrRqc3NtwdB04t89/1O/w1cDnyilFU=
  • 開始寫一個簡單的 BOT 程式 Webhook.php
    vi /usr/share/nginx/html/Webhook.php
    <?php
    require '/usr/share/nginx/vendor/linecorp/line-bot-sdk/vendor/autoload.php';
    $httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
    $bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
    ?>

參考網址

tech/linebot.txt · 上一次變更: 2019/04/10 09:23 由 jonathan_tsai