[Tips]LIFFアプリでYouTube再生後に公式アカウントへメッセージ送信する #LINE_API

はじめに

こんにちは、中村です。
LIFF SDKにはメッセージを送信する機能があります。これはユーザーの代わりにLIFFアプリを開いているトーク画面にメッセージを送信することができます。

今回は、YouTubeのIFrame Player APIを使ってLIFFアプリでYouTube動画を再生した後にメッセージを送信してくれる公式アカウントのサンプルを作成します。

やってみた

今回利用する動画、メッセージは常に同じものになります。また開くたびにメッセージが送信されますので例えばクーポンを送信したりする場合は、LINE IDでの管理などが必要になります。

インフラ

LIFFアプリで表示するために、HTMLとJavaScriptが実行できる環境を構築します。定番ですがCloudfrontとS3にします。

ソースコード

cm-nakamura-yuki/sample-liff-youtube にあります。

LIFFでYouTube再生/メッセージ送信

YouTubeでは、IFrame Player APIというAPIが提供されています。これは、YouTube動画プレイヤーを埋め込みしJavaScriptによる制御ができるものです。今回は、動画の表示・自動再生・終了時の検知に利用します。

APIのJavaScriptが読み込まれるとonYouTubeIframeAPIReady()が実行されます。ここでは、videoIdやサイズなどを元にプレイヤーの初期化します。初期化が完了し再生準備が整った時などステータスが変更された時に実行する関数を指定できます。

liff.sendMessagesは外部ブラウザでは利用できないため、liff.isInClientで内部ブラウザかどうかを判定します。またトーク画面が開かれている状態出ないとメッセージ送信できないためliff.sendMessagesでエラーになった場合はアラートをあげるようにしています。

    liff.init(
        {
            liffId: 'xxxxxxxxxxxxxxx'
        }
    ).then(() => {}
    ).catch((err) => {
        alert(err);
    });

    let player;
    let tag = document.createElement('script');
    tag.src = 'https://www.youtube.com/iframe_api';

    let firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

    function onYouTubeIframeAPIReady() {
        player = new YT.Player('player', {
            height: '360',
            width: '640',
            videoId: 'VWRG_CU4bqc',
            events: {
                'onReady': onPlayerReady,
                'onStateChange': onPlayerStateChange
            }
        });
    }

    function onPlayerReady(event) {
        event.target.playVideo();
    }

    function onPlayerStateChange(event) {
        if (event.data == YT.PlayerState.ENDED) {
            if (liff.isInClient()) {
                liff.sendMessages([
                    {
                        type: 'text',
                        text: 'ご視聴いただきありがとうございます。店舗でこちらのQRコードを店員にお見せください。'
                    },
                    {
                        type: 'image',
                        originalContentUrl: 'https://d2m1p9h7y3k5h.cloudfront.net/img/careers.png',
                        previewImageUrl: 'https://d2m1p9h7y3k5h.cloudfront.net/img/careers.png'
                    }
                ]).then(() => {
                    liff.closeWindow();
                }).catch((err) => {
                    alert('トーク画面からLIFFアプリ開いてください。 ' + err);
                });
            } else {
                alert('ご視聴いただきありがとうございます。クーポンを受け取るにはLINE公式アカウントから開く必要があります。');
            }
        }
    }

テスト

動画が少し長いので飛ばしています。動画再生完了時にメッセージを送信してLIFFを閉じました。

まとめ

YouTube IFrame Player APIとLIFFのメッセージ送信を使うことで、簡単に広告動画の再生を実施しクーポン送信などの施策が打てそうです。また動画自体もYouTubeに置いておけば良いのでHLSなどの問題も回避できると思います。