{"id":31028214,"url":"https://github.com/classyid/tracer-study-whatsapp-broadcast","last_synced_at":"2026-02-14T00:02:33.480Z","repository":{"id":313950655,"uuid":"1053559700","full_name":"classyid/tracer-study-whatsapp-broadcast","owner":"classyid","description":"Google Apps Script web application for managing vocational school alumni tracer study data with automated WhatsApp broadcast functionality. Features CSV/XLSX upload, template management, and batch messaging system.","archived":false,"fork":false,"pushed_at":"2025-09-09T16:09:37.000Z","size":35,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-09T19:50:59.339Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/classyid.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-09T16:02:18.000Z","updated_at":"2025-09-09T16:09:40.000Z","dependencies_parsed_at":"2025-09-09T20:02:56.383Z","dependency_job_id":null,"html_url":"https://github.com/classyid/tracer-study-whatsapp-broadcast","commit_stats":null,"previous_names":["classyid/tracer-study-whatsapp-broadcast"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/classyid/tracer-study-whatsapp-broadcast","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/classyid%2Ftracer-study-whatsapp-broadcast","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/classyid%2Ftracer-study-whatsapp-broadcast/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/classyid%2Ftracer-study-whatsapp-broadcast/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/classyid%2Ftracer-study-whatsapp-broadcast/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/classyid","download_url":"https://codeload.github.com/classyid/tracer-study-whatsapp-broadcast/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/classyid%2Ftracer-study-whatsapp-broadcast/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275020152,"owners_count":25391651,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-13T02:00:10.085Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-13T20:06:37.225Z","updated_at":"2026-02-14T00:02:33.425Z","avatar_url":"https://github.com/classyid.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Tracer Study WhatsApp Broadcast System\n\nA comprehensive Google Apps Script-based web application designed for vocational schools to manage alumni tracer study data and automate WhatsApp broadcast communications.\n\n### Features\n\n- **Data Management**\n  - CSV/XLSX file upload and processing\n  - Data synchronization with ministry tracer study database\n  - Alumni contact information management\n  - Phone number normalization (Indonesian format)\n\n- **WhatsApp Broadcasting**\n  - Template-based message system\n  - Bulk messaging with rate limiting\n  - Status tracking (KIRIM WA, TERKIRIM, STOP, GAGAL KIRIM)\n  - Batch processing with progress monitoring\n\n- **User Interface**\n  - Unified web application with dual interfaces\n  - Upload \u0026 synchronization page\n  - Broadcast management dashboard\n  - Mobile-responsive design\n\n- **Administration Tools**\n  - Google Sheets integration for direct access\n  - Sidebar tools for quick operations\n  - Menu-driven spreadsheet functions\n  - Real-time data preview\n\n### Technology Stack\n\n- **Backend:** Google Apps Script\n- **Frontend:** HTML5, CSS3, JavaScript\n- **UI Framework:** Bootstrap 5.3.3\n- **Icons:** Bootstrap Icons\n- **Data Storage:** Google Sheets\n- **File Processing:** Drive API\n- **External API:** WhatsApp Gateway\n\n### Prerequisites\n\n- Google Workspace account\n- WhatsApp API gateway service\n- Google Sheets with specific structure\n- Apps Script project permissions\n\n### Installation\n\n1. **Create Google Apps Script Project**\n   ```\n   1. Go to script.google.com\n   2. Create new project\n   3. Copy provided source code files\n   ```\n\n2. **Set Up Google Sheets**\n   ```\n   Required sheets:\n   - BROADCAST (main data sheet)\n   - DATA INTERNAL SEKOLAH (school internal data)\n   - TEMPLATE TEKS BC (message templates)\n   - NOTE (API configuration)\n   ```\n\n3. **Configure WhatsApp API**\n   ```\n   Update NOTE sheet with:\n   - API Key (cell C4)\n   - Sender ID (cell C5)\n   - API URL (cell C6)\n   - Web App URL (cell C10)\n   ```\n\n4. **Deploy Web Application**\n   ```\n   1. Apps Script Editor → Deploy → New deployment\n   2. Type: Web app\n   3. Execute as: Me\n   4. Access: Anyone or specific users\n   5. Copy deployment URL\n   ```\n\n### Usage\n\n#### For Administrators (Google Sheets)\n\nAccess spreadsheet directly for:\n- Menu-driven operations\n- Sidebar upload tools\n- Direct data manipulation\n- Advanced configurations\n\n#### For Users (Web Application)\n\n**Upload \u0026 Sync Data:**\n- Navigate to: `your-webapp-url?page=Upload`\n- Upload CSV/XLSX files\n- Preview data before processing\n- Sync with internal school database\n\n**Broadcast Management:**\n- Navigate to: `your-webapp-url?page=Index`\n- Select message templates\n- Set broadcast filters\n- Execute batch messaging\n- Monitor delivery status\n\n### File Structure\n\n```\n├── Code.gs                 # Main backend functions\n├── Wrapper.html           # Navigation wrapper (optional)\n├── Upload.html            # File upload interface\n├── Index.html             # Broadcast management interface\n└── README.md              # Documentation\n```\n\n### Configuration\n\n#### Message Templates\n\nTemplates support dynamic placeholders:\n- `\u003cNAMA\u003e` - Alumni name\n- `\u003cNISN\u003e` - Student identification number\n- `\u003cKOMPETENSI\u003e` - Competency field\n- `\u003cSTATUS ISI\u003e` - Completion status\n- `\u003cHARI\u003e` - Current day\n- `\u003cTANGGAL\u003e` - Current date\n- `\u003cJAM\u003e` - Current time\n- `\u003cSALAM\u003e` - Time-based greeting\n\n#### Rate Limiting\n\nDefault settings:\n- Minimum delay: 2 seconds\n- Maximum delay: 6 seconds\n- Batch size: 20 messages\n- Maximum runtime: 4.5 minutes\n\n### API Reference\n\n#### Main Functions\n\n- `processUpload(fileObj, options)` - Process uploaded files\n- `getBroadcastData(page, pageSize)` - Retrieve paginated data\n- `getTemplates()` - Get message templates\n- `processBroadcast(rowId)` - Send single message\n- `broadcast()` - Execute batch broadcast\n\n#### Utility Functions\n\n- `normalizePhoneTo62_(phone)` - Format phone numbers\n- `preparePayload_(rows)` - Process data rows\n- `sendWhatsAppNotification(number, message)` - Send WhatsApp message\n\n### Security Considerations\n\n- API keys stored in Google Sheets (consider Properties Service)\n- Input validation for uploaded files\n- Rate limiting to prevent API abuse\n- User access control via Google Workspace\n\n### Limitations\n\n- Google Apps Script 6-minute execution limit\n- Memory constraints for large files\n- WhatsApp API rate limits\n- Maximum 50MB total project size\n\n### Troubleshooting\n\n#### Common Issues\n\n1. **Templates not loading**\n   - Check TEMPLATE TEKS BC sheet exists\n   - Verify data in cells D4:D7\n\n2. **Upload failures**\n   - File size limit (10MB recommended)\n   - Check file format (CSV/XLSX only)\n   - Verify BROADCAST sheet structure\n\n3. **WhatsApp delivery failures**\n   - Validate API credentials in NOTE sheet\n   - Check phone number format (62xxx)\n   - Verify API service status\n\n4. **Performance issues**\n   - Reduce batch size\n   - Increase delays between messages\n   - Process data in smaller chunks\n\n### Contributing\n\n1. Fork the repository\n2. Create feature branch\n3. Test thoroughly with sample data\n4. Submit pull request with documentation\n\n### License\n\nMIT License - See LICENSE file for details\n\n### Support\n\nFor issues and questions:\n- Check troubleshooting section\n- Review Google Apps Script documentation\n- Contact system administrator\n\n### Changelog\n\n**v2.0.0**\n- Unified web application interface\n- Improved error handling\n- Enhanced mobile responsiveness\n- Better template management\n\n**v1.0.0**\n- Initial release\n- Basic upload and broadcast functionality\n- Google Sheets integration\n\n---\n\n**Note:** This system is specifically designed for Indonesian vocational schools participating in the Ministry of Education's tracer study program. Modify configurations as needed for other educational contexts.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclassyid%2Ftracer-study-whatsapp-broadcast","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclassyid%2Ftracer-study-whatsapp-broadcast","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclassyid%2Ftracer-study-whatsapp-broadcast/lists"}