Cloud Functions for Firebase ~Firestore를 트리거로 LINE에 알림~

~ 추기 ~
아무래도 Firebase와 Googole 이외의 서비스와의 제휴에는 신용 카드 정보를 등록하지 않으면 안 되는 모양. 주의를.
@atomyah 씨, 감사합니다.
~~~~~

Firebase를 사용할 기회가 있었기 때문에 확인
Cloud Functions for Firebase를 사용하여 다른 서비스(LINE Notify)와 연결해 보았습니다.

여기에서는 매우 간단한 LINE Notify를 사용하고 있습니다만, API를 제공하고 있는 서비스라면 무엇이든 대응할 수 있을 것!

[언어]
- TypeScript: 2.8.3

[라이브러리]
- firebase-admin: 6.0.0
- firebase-functions: 2.1.0
- request: 2.88.0
- request-promise: 4.2.2

Cloud Functions 배포



아래 공식 가이드를 참조하십시오.
htps : // 푹 빠져라. 오, ぇ. 코 m / 드 cs / 훈 c 치온 s / 게 ts r d? hl = 그럼

[보충]
firebase 의 초기화 후에 할 수 있는 firebase.json 에 이하의 기술이 있다고 생각합니다.
{
  "functions": {
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint",
      "npm --prefix \"$RESOURCE_DIR\" run build"
    ]
  }
}
$RESOURCE_DIR 를 정의하거나 경로를 직접 쓰거나 하지 않으면 배포 중에 뺍니다.
설치시부터 계층을 바꾸지 않으면 $RESOURCE_DIR을 "functions"로 바꾸는 것만으로 OK입니다.

LINE Notify



LINE이 준비한 API에 문자열을 보내면 "LINE Notify"에서 자신에게 알릴 수 있습니다.
어쨌든 간단하게 통지할 수 있으므로, 개인적으로는 편리합니다.

자세한 내용은 아래를 참조하십시오.
  • 공식 페이지
    htps : // 후 fy 보 t. 네. 메/그럼/
  • 참고 페이지
    htps : // 이 m/이니키키다 7/있어 ms/576 아 8226바

  • 라이브러리 설치



    1. 명령 프롬프트를 시작하고 프로젝트의 리소스 디렉토리로 이동$ cd <firebase を初期化したフォルダ>/functions
    2. request-promise 설치$ npm install --save request$ npm install --save request-promise
    (참고) htps //w w. 음 pmjs. 코 m / Pac 카게 / Rekue st-p Romise

    소스 코드



    ※<생성한 LINE Notify의 액세스 토큰> 의 개소만 치환해 주세요. ※
    import * as functions from 'firebase-functions';
    import * as admin from 'firebase-admin';
    import * as rp from 'request-promise';
    
    // firebase の初期化
    admin.initializeApp();
    const db = admin.firestore();
    
    // MEMO: simple が true の場合、 3XX のステータスコードを返却された時でもエラーとなる模様
    const request = rp.defaults({simple: false});
    
    const FIRESTORE_COLLECTION = 'test';
    const LINE_ACCESS_TOKEN = '<生成したLINE Notifyのアクセストークン>';
    
    // functions にデプロイする関数
    // とあるコレクションにドキュメントを作成すると、LINEに通知します。
    // MEMO: ドキュメントに対し、「作成」「更新」「削除」を取得することができます。詳細は下記参照
    //       https://firebase.google.com/docs/functions/firestore-events?hl=ja
    export const lineNotify = functions.firestore
      .document(FIRESTORE_COLLECTION + '/{doc}')
      .onCreate((snap, context) => {
    
      // line へ通知
      request({
        uri : 'https://notify-api.line.me/api/notify',
        method: 'POST',
        headers: {
          'Content-Type' : 'application/x-www-form-urlencoded',
          'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN
        },
        form: {
          'message': 'Success!!!\r\n' + FIRESTORE_COLLECTION + 'にドキュメントが作成されました。'
        }
      }).then(function(response) { // 成功時 (3XX)
        // LINE Notify からのレスポンスを Functions のログに出力
        console.log('User has %d repos', response.length);
        console.log('response :' + response);
        return null;
      }).catch(function (err) { // 失敗時 (4XX or 5XX)
        Error(err);
       });
      return null;
    });
    

    lineNotify 함수 배포



    1. firebase를 초기화한 디렉토리로 이동

    2. 다음 명령 실행$ firebase deploy --only functions:lineNotify
    [보충] --only 옵션을 붙이면 해당하는 Function만 배포할 수 있습니다.

    동작 확인



    배포된 프로젝트의 Functions를 열면 lineNotify 함수가 추가되었습니다.


    그런 다음 Database를 열고 test라는 컬렉션을 생성하고 문서도 만들어보십시오.
    아래 이미지와 같이 알림이 올 것입니다.


    로그도 확인해 봅니다.


    문제 없을 것 같네요!

    ※명령 프롬프트에서 배포 성공하더라도 반영되는 데 시간이 걸리는 경우가 있습니다. 2-3분 후에도 알림이 오지 않으면 Functions 로그를 확인해 보십시오.



    향후, 사용 장소도 늘어날 것 같으므로, 자신의 비망록이 되도록, 투고해 보았습니다.

    첫 투고 때문에, 이르지 않는 곳 등 있을까라고 생각하므로, 불명점·보충등 있으면 댓글 받을 수 있으면 좋겠습니다.

    좋은 웹페이지 즐겨찾기