0% found this document useful (0 votes)
11 views

App Script PT Api

Uploaded by

ifortebandaaceh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views

App Script PT Api

Uploaded by

ifortebandaaceh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 6

// kredensial

const spreadsheetId = ''


const dataOrderSheetName = 'Data Order'
const logSheetName = 'Log'

const botHandle = ''


const botToken = ''
const appsScriptUrl = ''
const telegramApiUrl = `https://api.telegram.org/bot${botToken}`

function log(logMessage = '') {


// akses sheet
const spreadsheet = SpreadsheetApp.openById(spreadsheetId)
const sheet = spreadsheet.getSheetByName(logSheetName)
const lastRow = sheet.getLastRow()
const row = lastRow + 1

// inisiasi nilai
const today = new Date

// insert row kosong


sheet.insertRowAfter(lastRow)

// insert data
sheet.getRange(`A${row}`).setValue(today)
sheet.getRange(`B${row}`).setValue(logMessage)
}

function formatDate(date) {
const monthIndoList = ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Ags',
'Sep', 'Okt', 'Nov', 'Des']

const dateIndo = date.getDate()


const monthIndo = monthIndoList[date.getMonth()]
const yearIndo = date.getFullYear()

const result = `${dateIndo} ${monthIndo} ${yearIndo}`

return result
}

function sendTelegramMessage(chatId, replyToMessageId, textMessage) {


// url kirim pesan
const url = `${telegramApiUrl}/sendMessage`;

// payload
const data = {
parse_mode : 'HTML',
chat_id : chatId,
reply_to_message_id : replyToMessageId,
text : textMessage,
disable_web_page_preview: true,
}

const options = {
method : 'post',
contentType: 'application/json',
payload : JSON.stringify(data)
}

const response = UrlFetchApp.fetch(url, options).getContentText()


return response;
}

function parseMessage(message = '') {


// pisahkan berdasarkan karakter enter
const splitted = message.split('\n')

// inisiasi variabel
let nama = ''
let kodeBarang = ''
let alamat = ''
let resi = ''

// parsing pesan untuk mencari nilai variabel


splitted.forEach(el => {
nama = el.includes('Nama:') ? el.split(':')[1].trim().replaceAll('\n', ' ') :
nama;
kodeBarang = el.includes('Kode Barang:') ? el.split(':')
[1].trim().replaceAll('\n', ' ') : kodeBarang;
alamat = el.includes('Alamat:') ? el.split(':')[1].trim().replaceAll('\n', ' ')
: alamat;
resi = el.includes('Resi:') ? el.split(':')[1].trim().replaceAll('\n', ' ') :
resi;
})

// kumpulkan hasil
const result = {
nama : nama,
kodeBarang: kodeBarang,
alamat : alamat,
resi : resi,
}

// jika data kosong


const isEmpty = (nama === '' && kodeBarang === '' && alamat === '' && resi ===
'')

return isEmpty ? false : result


}

function inputDataOrder(data) {
try {
// akses sheet
const spreadsheet = SpreadsheetApp.openById(spreadsheetId)
const sheet = spreadsheet.getSheetByName(dataOrderSheetName)
const lastRow = sheet.getLastRow()
const row = lastRow + 1

// inisiasi nilai
const number = lastRow
const idOrder = `ORD-${number}`
const today = new Date

// insert row kosong


sheet.insertRowAfter(lastRow)

// insert data
sheet.getRange(`A${row}`).setValue(number)
sheet.getRange(`B${row}`).setValue(idOrder)
sheet.getRange(`C${row}`).setValue(today)
sheet.getRange(`D${row}`).setValue(data['nama'])
sheet.getRange(`E${row}`).setValue(data['kodeBarang'])
sheet.getRange(`F${row}`).setValue(data['alamat'])
sheet.getRange(`G${row}`).setValue(data['resi'])
sheet.getRange(`H${row}`).setValue('Sedang dikemas')
sheet.getRange(`I${row}`).setValue(data['chatId'])

// jika berhasil, return idOrder


return idOrder

} catch(err) {
return false
}
}

function cekResi(resi = null) {


// cegah resi kosong
if (!resi) {
return 'Format pencarian resi tidak valid.'
}

// akses sheet
const spreadsheet = SpreadsheetApp.openById(spreadsheetId)
const sheet = spreadsheet.getSheetByName(dataOrderSheetName)
const lastRow = sheet.getLastRow()

// ambil data
const range = `A2:I${lastRow}`
const dataList = sheet.getRange(range).getValues()

// filter data
const dataListFiltered = dataList.filter(el => el[6].toString().toLowerCase() ===
resi.toString().toLowerCase())

// cek jika resi ditemukan


const isResiFound = dataListFiltered.length > 0

// variabel balasan
let messageReply = ''

// jika ditemukan
if (isResiFound) {
// jika ada no resi yang sama, yang diambil yang paling atas
const data = dataListFiltered[0]

messageReply = `Info Resi <b>${resi}</b>

ID Order: ${data[1]}
Tanggal Order: ${formatDate(data[2])}
Nama: ${data[3]}
Kode Barang: ${data[4]}
Alamat: ${data[5]}
Status Pengiriman: <b>${data[7]}</b>`

// jika tidak
} else {
messageReply = `Resi ${resi} tidak ditemukan.`
}

return messageReply
}

function handleUpdateDeliveryStatus(e) {
// ambil info sheet dan row yang baru diedit
const row = e.range.getRow()
const column = e.range.getA1Notation().replace(/[^a-zA-Z]/g, '')
const sheetName = e.range.getSheet().getSheetName()

// jika perubahan bukan pada sheet data order kolom H


if (sheetName !== dataOrderSheetName || column !== 'H') {
return false
}

// akses sheet
const spreadsheet = SpreadsheetApp.openById(spreadsheetId)
const sheet = spreadsheet.getSheetByName(dataOrderSheetName)
const today = new Date

// ambil data
const range = `A${row}:I${row}`
const data = sheet.getRange(range).getValues()

// isi konstanta
const idOrder = data[0][1]
const tanggalOrder = data[0][2]
const nama = data[0][3]
const kodeBarang = data[0][4]
const alamat = data[0][5]
const resi = data[0][6]
const statusPengiriman = data[0][7]
const chatId = data[0][8].toString()

const textMessage = `Update Info Resi <b>${resi}</b>

ID Order: ${idOrder}
Tanggal Order: ${formatDate(tanggalOrder)}
Nama: ${nama}
Kode Barang: ${kodeBarang}
Alamat: ${alamat}
Status Pengiriman: <b>${statusPengiriman}</b>

<i>Data per-${formatDate(today)}</i>`

// kirim pesan
sendTelegramMessage(chatId, null, textMessage)
}
function doPost(e) {
try {
// urai pesan masuk
const contents = JSON.parse(e.postData.contents)
const chatId = contents.message.chat.id
const receivedTextMessage = contents.message.text.replace(botHandle, '').trim()
// hapus botHandle jika pesan berasal dari grup
const messageId = contents.message.message_id

let messageReply = ''

// 1. jika pesan /start


if (receivedTextMessage.toLowerCase() === '/start') {
// tulis pesan balasan
messageReply = `Halo! Status bot dalam keadaan aktif.`

// 2. jika pesan diawali dengan /input


} else if (receivedTextMessage.split('\n')[0].toLowerCase() === '/input') {
const parsedMessage = parseMessage(receivedTextMessage)

// 2a.jika ada data


if (parsedMessage) {
const data = {
nama : parsedMessage['nama'],
kodeBarang: parsedMessage['kodeBarang'],
alamat : parsedMessage['alamat'],
resi : parsedMessage['resi'],
chatId : chatId
}

// insert data ke sheet


const idOrder = inputDataOrder(data)

// tulis pesan balasan


messageReply = idOrder ? `Data berhasil disimpan dengan ID Order <b>$
{idOrder}</b>` : 'Data gagal disimpan'

// 2b. jika tidak ada data


} else {
messageReply = 'Data kosong dan tidak dapat disimpan'
}

// 3. cek resi
} else if (receivedTextMessage.split(' ')[0].toLowerCase() === '/resi') {
// ambil resi
const resi = receivedTextMessage.split(' ')[1]

// ambil info
messageReply = cekResi(resi)

// 4. format
} else if (receivedTextMessage.toLowerCase() === '/format') {
messageReply = `Untuk <b>input data order</b> gunakan format:

<pre>/input
Nama:
Kode Barang:
Alamat:
Resi: </pre>

Untuk <b>cek resi</b> gunakan format:

<pre>/resi [nomor resi]</pre>


(Tanpa tanda kurung siku)`

// 5. format salah
} else {
messageReply = `Pesan yang Anda kirim tidak sesuai format.

Kirim perintah /format untuk melihat daftar format pesan yang tersedia.`
}

// kirim pesan balasan


sendTelegramMessage(chatId, messageId, messageReply)

} catch(err) {
log(err)
}
}

function setWebhook() {
// akses api
const url = `${telegramApiUrl}/setwebhook?url=${appsScriptUrl}`
const response = UrlFetchApp.fetch(url).getContentText()

Logger.log(response)
}

You might also like