WhatsApp으로 인보이스 자동 전송
15018 단어 javascriptnodewebhooks
전제 조건
Express 앱을 로컬로 설정
먼저 포트 3000에서 수신하고 '/webhooks/ready'에서 사용할 수 있는 URI가 있는 익스프레스 앱을 설정합니다.
const app = express();
app.use(express.json());
app.use(express.urlencoded({
extended: true
}));
app.get('/', function (req, res) {
res.end('Hello World 1',()=>{
console.log(`Get Body ${JSON.stringify(req.body)}`)
});
})
app.post('/webhooks/ready',function (req,res){
res.end('Thanks for your business POST',()=>{
console.log(`POST Body ${JSON.stringify(req.body)}`)
});
var name = req.body.name;
if(name == "invoice.create" || name == "invoice.update"){
var { account_id, object_id } = req.body;
sendShareLink(account_id,object_id);
};
})
app.listen(3000,()=>{
console.log("listening on port 3000")
})
공용 웹 서버 만들기
공개적으로 액세스할 수 있는 웹 서버를 만들기 위해 'ngrok'을 사용하고 있습니다. 이것을 사용하여 ngrok를 다운로드할 수 있습니다link. ngrok를 설치하면 ngrok를 시작하고 로컬 웹 서버를 노출할 수 있습니다. ngrok에서 제공한 https URL을 기록해 두는 것을 잊지 마세요. 이 URL을 사용하여 웹후크를 등록합니다. ngrok는 포트 3000에서 localhost 서버로 호출을 릴레이합니다.
웹후크 등록
FreshBooks는 인보이스 생성 시 애플리케이션에 알려야 합니다. 알림을 받으려면 'invoice.created' 이벤트에 대해 등록하고 FreshBooks webhook을 수신해야 합니다. ngrok를 사용하여 이전에 생성된 URI를 사용하여 웹후크에 등록합니다.
https://d7b0-213-127-111-74.ngrok.io
. 이 부분은 작성 시점에 아직 애플리케이션에 내장되지 않았습니다. 지금은 postman 을 사용하여 이 작업을 수행합니다. ngrok inspect를 사용하여 웹후크에 대한 검증자 코드를 가져올 수 있습니다.You can inspect calls coming in via a web UI provided by ngrok. After you start the ngrok agent, open http://localhost:4040 in a browser on the same machine
공유 가능한 링크 및 고객 연락처 얻기
먼저 FreshBooks 클라이언트를 생성하여 . 앱의 clientID와 env 변수를 사용하여 제공한 전달자 토큰으로 클라이언트를 초기화합니다.
FreshBooks UI를 사용하여 인보이스를 생성하면 이전에 등록된 링크에 대한 웹후크 호출이 트리거됩니다. 앱이 이 API 호출을 수신하면 인보이스 ID를 검색합니다. 송장 ID는 FreshBooks 클라이언트를 사용하여 송장 링크를 생성하는 데 사용됩니다.
공유 가능한 인보이스 링크를 생성하기 위해 nodejs sdk를 사용하고 get shareable link api를 사용하여 인보이스 ID에 대한 인보이스 링크를 가져옵니다. 또한 클라이언트의 휴대폰 번호도 검색합니다.
const postWhatsapp = require('./postWhatsapp');
const clientId = process.env.CLIENTID;
const token = process.env.TOKEN;
let accountId;
let invoiceId;
module.exports = async (accountId,invoiceId)=>{
try {
const { Client } = await import("@freshbooks/api");
const app = new Client(clientId,token);
const shareLink = await app.invoices.shareLink(accountId,invoiceId);
const invoiceInfo = await app.invoices.single(accountId,invoiceId);
const client = await app.clients.single(accountId,invoiceInfo.data.customerId);
postWhatsapp(shareLink.data.shareLink, client.data.mobPhone);
} catch (error) {
console.log(error);
}
};
whatsapp를 통해 인보이스 보내기
공유 가능한 링크가 있으면 Twilio SDK를 사용하여 'Twilio SID' 및 '인증 토큰'을 사용하여 클라이언트를 초기화합니다. 이 twilio 클라이언트를 사용하여 인보이스에 대한 공유 가능한 링크가 포함된 whatsapp 메시지를 보냅니다.
const twilio = require('twilio');
const accountSid = process.env.ACCSID;
const authToken = process.env.AUTHTOK;
const client = require('twilio')(accountSid, authToken);
let shareLink;
let mobNo
module.exports= (shareLink,mobNo)=>{
client.messages
.create({
body: `Here is your share link ${shareLink}`,
from: 'whatsapp:+14155238886',
to: `whatsapp:${mobNo}`
})
.then(message => console.log(message.sid))
.catch(error=>{
console.log(error);
})
.done();
}
Twilio whatsapp api에 대한 자세한 정보를 찾고 있다면 여기에서 확인할 수 있습니다link.
이제 클라이언트에 대한 인보이스를 만들 때마다 서버에서 알림을 받고 공유 링크를 가져와서 WhatsApp을 통해 클라이언트에게 보냅니다.
내 개인 저장소에서 전체 코드를 체크아웃할 수 있습니다.
lygel07 / freshbooks-whatsapp-링크
Reference
이 문제에 관하여(WhatsApp으로 인보이스 자동 전송), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/freshbooks/automatically-send-invoices-with-whatsapp-fii텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)