{
  "schema": "tesign-radar/item/1",
  "generated_at": "2026-09-17T01:56:13.055Z",
  "lang": "ko",
  "slug": "openreply",
  "url": "https://tesign.com/item/openreply/",
  "alternates": {
    "ko": {
      "html": "https://tesign.com/item/openreply/",
      "json": "https://tesign.com/item/openreply/index.json",
      "markdown": "https://tesign.com/item/openreply/index.md"
    },
    "en": {
      "html": "https://tesign.com/en/item/openreply/",
      "json": "https://tesign.com/en/item/openreply/index.json",
      "markdown": "https://tesign.com/en/item/openreply/index.md"
    }
  },
  "name": "OpenReply",
  "use_label": "인스타그램 댓글 DM 자동화",
  "one_liner": "인스타그램 댓글의 키워드를 감지해 공식 Meta API로 DM을 보내는 자체 호스팅 ManyChat 대안.",
  "text": {
    "why": "릴에 'LINK'라고 댓글을 달면 링크를 DM으로 보내 주는 '댓글→DM'은 기능 하나인데, 이 기능을 제공하는 도구는 모두 정기 구독을 요구합니다. OpenReply는 이 흐름을 MIT 소프트웨어로 제공하며, 스크래핑이나 브라우저 자동화 없이 공식 Instagram API(Instagram Login)만 쓰고 비밀번호를 묻지 않습니다. 계정별로 Meta가 문서화한 시간당 750건의 비공개 답장 한도 아래로 속도를 조절하고 초과분은 버리지 않고 대기열에 넣습니다. 추적 링크·팔로우 게이트·스토리 답장 트리거·대시보드 인박스도 포함합니다.",
    "take": "구독 서비스 한 개를 대체하지만, 대신 서버·DB·Meta 앱 심사를 직접 감당해야 합니다.",
    "build": [
      "여러 고객 계정을 워크스페이스·역할로 묶어 소규모 대행사용 댓글 자동화 서비스를 운영할 수 있고, 추적 링크의 클릭·CTR 데이터를 자기 쇼핑몰 캠페인 분석에 연결할 수 있습니다."
    ],
    "who": [
      {
        "role": "인스타그램으로 상품을 파는 소상공인",
        "situation": "댓글 키워드에 자동으로 링크 DM 발송"
      },
      {
        "role": "크리에이터",
        "situation": "스토리 답장 'LINK'로 링크 전달, 팔로우 게이트로 팔로워 확보"
      },
      {
        "role": "소규모 대행사",
        "situation": "고객 계정을 워크스페이스로 나눠 운영, 발송 로그 관리"
      }
    ],
    "start": [
      {
        "command": false,
        "text": "git clone https://github.com/diwenne/openreply.git"
      },
      {
        "command": false,
        "text": "cd openreply && npm install && cp .env.example .env   # 값 채우기: docs/setup.md"
      },
      {
        "command": false,
        "text": "docker-compose up -d      # starts Postgres and Redis"
      },
      {
        "command": false,
        "text": "npm run db:generate && npm run db:migrate"
      },
      {
        "command": false,
        "text": "npm run dev   # 웹 http://localhost:3000 · 두 번째 터미널에서 npm run worker (실제 DM 발송)"
      }
    ],
    "caveat": [
      "라이선스 MIT. 인스타그램 비즈니스·크리에이터 계정만 연결 가능(개인 계정 불가). 자체 호스팅 전용: PostgreSQL, Redis, 공개 HTTPS URL, 매직링크 로그인용 메일 발송(Resend), 상시 실행되는 워커 프로세스가 필요합니다. openreply.diwen.dev는 대시보드 데모일 뿐 가입해도 DM이 나가지 않습니다. 인스타그램 연결은 직접 Meta 앱을 만들어 심사받거나 유료 후원사 Zernio를 쓰는 두 길이 있고 호스팅 비용은 별도입니다. Meta의 정책·24시간 메시지 창·속도 제한은 그대로 적용됩니다."
    ]
  },
  "cta": {
    "type": "self_host",
    "label": "SELF-HOST",
    "url": "https://openreply.diwen.dev/"
  },
  "ready": "self-host",
  "categories": [
    "commerce",
    "social"
  ],
  "categories_confirmed": true,
  "tags": [
    "instagram",
    "comment-to-dm",
    "marketing-automation",
    "self-hosted",
    "nextjs",
    "meta-api"
  ],
  "platform": [
    "web"
  ],
  "license": {
    "spdx": "MIT",
    "scope": "permissive",
    "scope_text": "상업 이용·수정·재배포 가능. 저작권 고지는 유지.",
    "url": "https://spdx.org/licenses/MIT.html",
    "note": null,
    "open_source": true
  },
  "language": "TypeScript",
  "source_urls": {
    "canonical": "https://openreply.diwen.dev/",
    "github": "https://github.com/diwenne/openreply",
    "huggingface": null,
    "app_store": null,
    "sightings": [
      {
        "source": "github",
        "url": "https://github.com/diwenne/openreply",
        "posted_at": "2026-09-05T08:00:00.000Z",
        "hn_url": null
      }
    ]
  },
  "numbers": {
    "as_of": "2026-09-16T21:00:00.000Z",
    "stars": 2292,
    "stars_unit": "GitHub stars",
    "stars_checked_at": "2026-09-15T19:35:16.762Z",
    "stars_observed_since_check": 0,
    "star_delta_24h": null,
    "star_delta_7d": 4,
    "star_delta_30d": 16,
    "star_delta_unit": "GitHub stars gained in the window, GH Archive events summed to as_of",
    "spark_14d": [
      null,
      2,
      8,
      2,
      null,
      null,
      null,
      null,
      2,
      2,
      null,
      null,
      null,
      null
    ],
    "hf_likes": null,
    "hf_likes_observed_at": null,
    "hn_points": null,
    "hn_points_observed_at": null,
    "store": null,
    "method": "별 총합 = GitHub에서 마지막으로 확인한 값(stars_checked_at) + 그 뒤 GH Archive에서 관측한 증가. 24h·7d·30d 증가는 GH Archive 시간별 이벤트를 기준 시각(as_of)까지 합한 값. 우리 점수는 없습니다."
  },
  "ranks": {
    "as_of": "2026-09-16T21:00:00.000Z",
    "all_time": null,
    "rising": {
      "24h": null,
      "7d": null,
      "30d": null
    },
    "categories": [
      {
        "category": "commerce",
        "label": "커머스",
        "rank": 6
      },
      {
        "category": "social",
        "label": "소셜",
        "rank": 19
      }
    ]
  },
  "activity": {
    "pushed_at": "2026-09-14T19:42:33.000Z",
    "owner_type": "User",
    "open_issues": 6,
    "contributors": 22,
    "releases_count": 0,
    "latest_release": null,
    "checked_at": "2026-09-15T19:35:16.762Z",
    "core_checked_at": "2026-09-15T19:35:16.762Z"
  },
  "signals": [
    {
      "kind": "back",
      "label": "과거 기록",
      "value": null
    }
  ],
  "images": {
    "og": "https://tesign.com/img/openreply-fe6ded9980.png",
    "cover": "https://tesign.com/img/openreply-fe6ded9980.png",
    "cover_width": 2400,
    "cover_height": 1260,
    "gallery": [
      "https://tesign.com/img/openreply-fe6ded9980.png"
    ],
    "alt": "OpenReply 대시보드 화면: 캠페인과 발송 현황 [화면 구성 확인 필요]",
    "tier": 1
  },
  "dates": {
    "first_seen_at": "2026-09-13T09:42:43.668Z",
    "source_created_at": "2026-07-17T02:01:45.000Z",
    "discovery_hours": 1399.6829633333334,
    "launch_signal_at": "2026-09-05T08:00:00.000Z",
    "kept_at": "2026-09-14T19:27:43.576Z",
    "first_published_at": "2026-09-14T19:27:43.743Z",
    "updated_at": "2026-09-15T04:36:56.944Z",
    "ingestion_mode": "backfill"
  },
  "notes": [
    "이 파일은 tesign.com 항목 페이지와 같은 빌드에서 같은 데이터로 만들어졌습니다. 소개 글은 편집자가 쓴 것이고, 숫자는 저장된 관측값입니다.",
    "JSON의 null은 관측하지 않았다는 뜻입니다 — 0이 아닙니다. 마크다운에서는 [확인 필요]로 적습니다.",
    "별 총합 = GitHub에서 마지막으로 확인한 값(stars_checked_at) + 그 뒤 GH Archive에서 관측한 증가. 24h·7d·30d 증가는 GH Archive 시간별 이벤트를 기준 시각(as_of)까지 합한 값. 우리 점수는 없습니다.",
    "과거 데이터를 되짚어 채운 항목입니다. 라이브 발견이 아닙니다.",
    "요약이며 법적 조언이 아닙니다."
  ]
}
